const allConfig = require('./../../config'),
    config = allConfig.database,
    mysql = require('mysql');

const pool = mysql.createPool({
    host: config.HOST,
    user: config.USERNAME,
    password: config.PASSWORD,
    timezone:"08:00",
    database: config.DATABASE
});

let query = function (sql, values) {
    return new Promise((resolve, reject) => {
        pool.getConnection(function (err, connection) {
            if (err) {
                console.log(err);
                resolve(err);
            } else {
                connection.query(sql, values, (err, rows) => {
                    if (err) {
                        console.log(err);
                        reject(err);
                    } else {
                        resolve(rows)
                    }
                    connection.release();
                })
            }
        })
    })
};

let createTable = function( sql ) {
    return query( sql, [] )
}


let findDataById = function( table,  id ) {
    let  _sql =  "SELECT * FROM ?? WHERE id = ? "
    return query( _sql, [ table, id, start, end ] )
}


let findDataByPage = function( table, keys, start, end ) {
    let  _sql =  "SELECT ?? FROM ??  LIMIT ? , ?"
    return query( _sql, [keys,  table,  start, end ] )
}


let insertData = function( table, values ) {
    let _sql = "INSERT INTO ?? SET ?"
    return query( _sql, [ table, values ] )
}


let updateData = function( table, values, id ) {
    let _sql = "UPDATE ?? SET ? WHERE id = ?"
    return query( _sql, [ table, values, id ] )
}


let deleteDataById = function( table, id ) {
    let _sql = "DELETE FROM ?? WHERE id = ?"
    return query( _sql, [ table, id ] )
}


let select = function( table, keys ) {
    let  _sql =  "SELECT ?? FROM ?? "
    return query( _sql, [ keys, table ] )
}

let selectAll = function( table ) {
    let  _sql =  "SELECT * FROM ?? "
    return query( _sql, [ table ] )
}

let count = function( table ) {
    let  _sql =  "SELECT COUNT(*) AS total_count FROM ?? "
    return query( _sql, [ table ] )
}

let queryBySql = function( sql ) {
    return query( sql, [] )
}

module.exports = {
    query,
    createTable,
    findDataById,
    findDataByPage,
    deleteDataById,
    insertData,
    updateData,
    select,
    count,
    selectAll,
    queryBySql
}
